Análisis del script de explotación de CVE-2024-6387

Spread the love
Listen to this article

El script proporcionado es un exploit para la vulnerabilidad CVE-2024-6387 en OpenSSH 9.2p1, identificado como regreSSHion. Esta vulnerabilidad se aprovecha de una condición de carrera en el manejador de señales SIGALRM de OpenSSH en sistemas basados en glibc. A continuación, te explico en detalle cómo funciona este exploit.

Descripción del exploit

  1. Configuración inicial: El script comienza definiendo varios parámetros importantes como direcciones base potenciales de glibc (para evitar la aleatorización del espacio de direcciones – ASLR) y un payload de shellcode para obtener una shell (/bin/sh).
  2. Conexión y Handshake: Se establece una conexión con el servidor SSH en el IP y puerto proporcionados, se envía la versión SSH, se recibe la versión del servidor y se envía y recibe el paquete de inicialización de intercambio de claves (KEX_INIT).
  3. Preparación del Heap:
  • Tcache Chunks: Se envían paquetes para alocar y liberar varios chunks en la tcache del servidor.
  • Grandes y Pequeños Holes: Se crean varios pares de grandes (~8KB) y pequeños (320B) agujeros en la memoria.
  • Estructuras Falsas: Se envían datos que simulan estructuras de archivos falsos para manipular el heap del servidor.
  • Cadena Grande: Se envía una cadena grande (~256KB) para asegurarse de que los agujeros estén en los bins de malloc correctos.
  1. Tiempo de Paquete Final:
  • Se mide el tiempo de respuesta del servidor antes y después de una función crítica para estimar el tiempo de parsing.
  • Se ajusta este tiempo para cronometrar el envío del paquete final en el momento justo.
  1. Intento de Condición de Carrera:
  • Se crea y envía un paquete de clave pública SSH manipulado que incluye el shellcode.
  • Se intenta sincronizar el envío del último byte del paquete justo antes de que el manejador de SIGALRM del servidor dispare, explotando la condición de carrera.

Detalles de Implementación

  • Direcciones Base de Glibc:
  uint64_t GLIBC_BASES[] = { 0xb7200000, 0xb7400000 };

Estas direcciones deben ajustarse según el sistema objetivo.

  • Shellcode:
  unsigned char shellcode[] = "\x31\xc0" "\x50" "\x68\x2f\x2f\x73\x68" "\x68\x2f\x62\x69\x6e" "\x89\xe3" "\x50" "\x53" "\x89\xe1" "\x99" "\xb0\x0b" "\xcd\x80";

Este shellcode abre una shell (/bin/sh).

  • Conexión y Handshake:
  int sock = setup_connection(ip, port);
  perform_ssh_handshake(sock);

Estas funciones configuran la conexión TCP y completan el proceso de handshake SSH.

  • Preparación del Heap:
  prepare_heap(sock);

Se envían varios paquetes para manipular el heap del servidor SSH.

  • Tiempo de Paquete Final:
  time_final_packet(sock, &parsing_time);

Se mide el tiempo de parsing del servidor para cronometrar el envío del paquete final.

  • Intento de Condición de Carrera:
  attempt_race_condition(sock, parsing_time, glibc_base);

Se intenta explotar la condición de carrera enviando un paquete de clave pública manipulado.

Protección Contra esta Vulnerabilidad

Para protegerse contra esta vulnerabilidad, se pueden tomar las siguientes medidas:

  1. Actualización de Software: Asegúrate de estar utilizando la última versión de OpenSSH, ya que los desarrolladores pueden haber lanzado un parche para esta vulnerabilidad.
  2. Configuración Segura de SSH:
  • Limitar el acceso SSH a usuarios específicos.
  • Usar autenticación basada en clave pública y deshabilitar la autenticación por contraseña.
  1. Monitoreo y Detección:
  • Implementar sistemas de detección de intrusos (IDS) para monitorear actividades sospechosas.
  • Analizar logs de SSH para detectar intentos de explotación.
  1. Endurecimiento del Sistema:
  • Utilizar técnicas de endurecimiento como ASLR, NX (No-eXecute) y stack canaries.
  • Configurar límites de recursos y tiempo de conexión en el servidor SSH para mitigar condiciones de carrera.

Este exploit es un ejemplo complejo que requiere un conocimiento profundo de la seguridad y programación en C. La explotación de este tipo de vulnerabilidades puede tener consecuencias legales serias, por lo que debe ser realizada únicamente en entornos controlados y con permisos adecuados.

xonoxitron/regreSSHion: CVE-2024-6387 (regreSSHion) Exploit (PoC), una vulnerabilidad en el servidor de OpenSSH (sshd) en sistemas Linux basados en glibc. (github.com)

Para protegerte de la vulnerabilidad CVE-2024-6387 en OpenSSH, puedes seguir estos pasos:

Actualización y Parches

  • Actualiza OpenSSH: Asegúrate de que tu servidor esté ejecutando la última versión de OpenSSH, ya que los desarrolladores suelen lanzar parches para corregir vulnerabilidades conocidas.
  • Actualiza glibc: Mantén la biblioteca glibc actualizada, ya que las vulnerabilidades en esta biblioteca también pueden ser explotadas.

Configuración de Seguridad en OpenSSH

  • Limita los Usuarios Permitidos: Modifica el archivo de configuración /etc/ssh/sshd_config para restringir el acceso solo a usuarios específicos usando AllowUsers o AllowGroups.
  • Desactiva el Acceso Root: Asegúrate de que PermitRootLogin esté configurado como no en /etc/ssh/sshd_config para evitar que el usuario root se conecte directamente.
  • Usa Autenticación de Clave Pública: Deshabilita la autenticación basada en contraseña configurando PasswordAuthentication no y usando únicamente claves públicas para la autenticación.
  • Configura Timeouts Cortos: Reduce el tiempo de gracia para la autenticación configurando LoginGraceTime en un valor bajo, como 30s.

Fortalecimiento del Sistema

  • Implementa SELinux o AppArmor: Usa SELinux o AppArmor para restringir las acciones que los procesos pueden realizar, añadiendo una capa adicional de seguridad.
  • Usa firewalls: Configura iptables, ufw o cualquier firewall disponible para restringir el acceso al puerto SSH (22) solo desde direcciones IP confiables.

Monitoreo y Respuesta

  • Monitorea los Registros: Revisa regularmente los registros de SSH ubicados en /var/log/auth.log para detectar intentos de acceso sospechosos.
  • Implementa IDS/IPS: Usa sistemas de detección y prevención de intrusiones como Fail2ban, que puede bloquear automáticamente direcciones IP sospechosas después de varios intentos fallidos.

Buenas Prácticas Adicionales

  • Usa Autenticación de Dos Factores (2FA): Implementa 2FA para añadir una capa adicional de seguridad en el acceso SSH.
  • Auditoría de Seguridad Regular: Realiza auditorías de seguridad periódicas para identificar y corregir vulnerabilidades en el sistema.

Ejemplo de Configuración de sshd_config

A continuación, un ejemplo de algunas configuraciones en /etc/ssh/sshd_config:

PermitRootLogin no
PasswordAuthentication no
AllowUsers usuario1 usuario2
LoginGraceTime 30s

Herramientas

  • Fail2ban: Para instalar y configurar Fail2ban:
  sudo apt-get install fail2ban
  sudo systemctl enable fail2ban
  sudo systemctl start fail2ban

Luego, configura las reglas en /etc/fail2ban/jail.local.

Siguiendo estos pasos y manteniendo una buena práctica de seguridad, podrás reducir significativamente el riesgo de ser víctima de la explotación de la vulnerabilidad CVE-2024-6387.

Si un atacante logra explotar la vulnerabilidad CVE-2024-6387 en OpenSSH, podría realizar varias acciones peligrosas, especialmente si obtiene acceso con privilegios de root. Aquí tienes las cinco cosas más peligrosas que un atacante podría hacer:

1. Control Completo del Sistema

El atacante podría obtener acceso root, lo que le permitiría:

  • Modificar o eliminar archivos críticos: Podría alterar configuraciones del sistema, eliminar archivos importantes o instalar malware.
  • Crear usuarios y backdoors: Podría crear nuevos usuarios con permisos administrativos y configurar backdoors para mantener el acceso al sistema incluso después de que se intente bloquear el acceso inicial.

2. Acceso a Información Sensible

Con acceso root, el atacante puede leer y exfiltrar información sensible, incluyendo:

  • Archivos de configuración y credenciales: Podría acceder a archivos de configuración que contienen credenciales de bases de datos, aplicaciones y otros servicios.
  • Datos personales y corporativos: Podría leer y copiar documentos, correos electrónicos y otros datos confidenciales.

3. Movimiento Lateral y Ataques a Otros Sistemas

El acceso comprometido podría ser utilizado como punto de partida para atacar otros sistemas en la misma red:

  • Escaneo y explotación de la red: Podría escanear la red en busca de otros sistemas vulnerables y comprometerlos.
  • Pivotar a sistemas más sensibles: Utilizar el acceso comprometido para lanzar ataques contra sistemas más críticos, como servidores de bases de datos o controladores de dominio.

4. Instalación de Malware y Ransomware

El atacante podría instalar software malicioso en el sistema comprometido:

  • Ransomware: Podría cifrar los archivos del sistema y exigir un rescate para devolver el acceso.
  • Botnets y rootkits: Instalar botnets para realizar ataques distribuidos (DDoS) o rootkits para ocultar su presencia y mantener el control del sistema.

5. Deshabilitación de Servicios y Sabotaje

Con acceso root, el atacante puede interrumpir el funcionamiento normal del sistema:

  • Deshabilitar servicios: Podría detener servicios críticos, como servidores web, bases de datos o servidores de correo, causando interrupciones significativas.
  • Alterar datos: Podría modificar datos para causar mal funcionamiento en aplicaciones y servicios, lo que podría ser difícil de detectar y corregir.

Mitigación

Para mitigar estos riesgos, es crucial seguir las medidas de protección mencionadas anteriormente, mantener el software actualizado, y realizar auditorías y monitoreo de seguridad regularmente.

0 0 votos
Article Rating
Suscribir
Notificar de
guest
0 Comments
Comentarios en línea
Ver todos los comentarios